package com.yonyou.cyxdms.sysAuth.service.service.manage.employee;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yonyou.cyx.framework.bean.dto.framework.RestResultResponse;
import com.yonyou.cyx.framework.service.base.ICommonService;
import com.yonyou.cyxdms.sysAuth.service.dto.CodeDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.EmployeeUpdateDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.UserDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.role.RolePDto;
import com.yonyou.cyxdms.sysAuth.service.dto.user.EmployeeDTO;
import com.yonyou.cyxdms.sysAuth.service.entity.EmployeePO;
import com.yonyou.cyxdms.sysAuth.service.vo.employee.*;
import com.yonyou.cyxdms.sysAuth.service.vo.weChat.WechatInfo;
import com.yonyou.cyxdms.sysmanage.client.domains.dto.EmployeeDictDto;
import com.yonyou.cyxdms.sysmanage.client.vo.employee.EmployeeOrgsVO;
import com.yonyou.cyxdms.sysmanage.client.vo.employee.EmployeeVO;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 经销商员工信息
 *
 * @author renwd
 * @since 2019/7/9
 */
public interface EmployeeService extends ICommonService<EmployeeDTO, EmployeePO, Integer> {
    public List<EmployeeVO> getEmployees(String queryCondition);

    public EmployeeVO getemployeesbyemployeeno(String appId, String employeeno, String dealerCode);

    List<EmployeeVO> employeeByDealerCode(String appId, String dealerCode);

    List<EmployeeVO> getEmployeeNoByLikeEmployeeName(String appId,String dealerCode,String employeeName);

    /**
     * 根据角色查询销售顾问
     *
     * @param roleType
     * @return java.util.List<com.yonyou.cyxdms.basedata.client.domains.vo.EmployeeVO>
     * @author renwd
     * @since 2019/3/21
     */
    List<EmployeeVO> getEmployeesByPosition(Integer roleType);
    /**
     * 销售顾问下拉数据
     *
     * @param
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.ConsultantVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<ConsultantVO> qryPowerSalesConsultant();

    /**
     * 电销顾问下拉数据
     *
     * @param
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.ConsultantVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<ConsultantVO> qryTelemarkConsultant();

    /**
     * 员工信息下拉框调用的方法
     *
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.EmployeeSelectVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<EmployeeSelectVO> selectEmployees(Map<String, Object> queryParam);

    /**
     * 根据dealer_code查询销售顾问
     *
     * @param dealerCode
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.ConsultantVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<ConsultantVO> qryPowerDealerSalesConsultant(String dealerCode);

    /**
     * @author ：quankk
     * @date ：2019/7/10 16:04  2019-08-20
     * @description：
     */
    IPage<EmployeeSearchVO> search(Page<EmployeeSearchVO> page, Map<String, String> param);

    /**
     * @author ：李贺
     * @date ：2019/9/18
     * @description：
     */
    List<CodeDTO> findTcCodeByType(Long id);

    /**
     * @author ：quankk
     * @date ：2019/7/10 17:26
     * @description：
     */
    EmployeeVO findByEmployeeId(Long id);

    /**
     * @author ：quankk
     * @date ：2019/7/10 18:08
     * @description：
     */
    void updateEmpById(Long id, EmployeeUpdateDTO empDto);

    /**
     * @author ：maxingjian
     * @date ：2019/7/11
     * @description：
     */
    IPage<EmployeeUsersVO> searchUserEmployees(Page page, Map<String, Object> queryCondition);

    /**
     * @author ：maxingjian
     * @date ：2019/7/12
     * @description：
     */
    void lock(Long id);

    /**
     * @author ：maxingjian
     * @date ：2019/7/12
     * @description：
     */
    void removeLock(Long id);

    /**
     * @author ：maxingjian
     * @date ：2019/7/12
     * @description：
     */
    List<Map<String, Object>> findEmployeeRoleById(Long id);

    /**
     * @author ：quankk
     * @date ：2019/7/19 11:03
     * @description：新增员工信息
     */
    Long addEmployee(EmployeeUpdateDTO empDto);

    /**
     * @author :duxg
     * @date :2019/7/29 14:10
     * @description:客户信息权限
     */
    public String findAuthorization(Long menuId, String alias, String salesColumn, String orgColumn);

    /**
     * @author :maxingjian
     * @date :2019/12/19 14:10
     * @description:客户信息权限
     */
    public String findAuthorization(Long menuId, String alias, String salesColumn, String orgColumn,boolean isDealer);

    /**
     * @author :maxingjian
     * @date :2019/12/25 14:10
     * @description:客户信息权限
     */
    public String findAuthorization(Long menuId, String alias, String salesColumn, String orgColumn,boolean isDealer,boolean needSaleCode,boolean needServiceCode);
    /**
     * @author :maixingjian
     * @date :2019/10/10 14:10
     * @description:通过菜单获取本人本组织
     */
    public String findPermissionRange(Long menuId);

    public EmployeeDTO loginByNameOrPhone(String vUser, String vPwd, String isInit);

    public UserDTO getUserInfo(String id);

    public int resetPwdByPhone(String vPwd, String vMobile, String vPwdOld, String flag);

    public int resetPwdByPno(String name, String pwd, String newPassword);

    public EmployeeDTO getEmpInfoByOpenId(String openId);

    public EmployeeDTO getEmpInfoByAppId(String openId);

    public int updatewxopenid(String vMobile, String openId);

    public int updateAppOpenId(String vMobile, String openId, String vwxnickname);

    public int updateInitPwd(String vMobile, String vinitpwd);

    public EmployeeDTO findEmpInfo(String vUser);

    public EmployeeDTO findEmpBind(String vMobile);

    public int updateLoginFailNum(String vUser, int vState, int nLoginFailNum);

    List<UserDTO> checkUser(String nemployeeid);

    void updatereg(String id, String reg);

    public EmployeeDictDto getEmployeeById(Long employeeId);

    List<EmployeeOrgsVO> getSalesmans();

    List<EmployeeOrgsVO>  getDirSalesName(Long menuId, String positionCode);

    //根据条件查询员工信息
    IPage<EmployeeSearVO> employeeSearch(Page<EmployeeSearVO> page, SearchParamVO searchParamVO);

    //根据条件查询员工信息(提供索赔)
    IPage<EmployeeSearClaimVO> employeeSearchClaim(Page<EmployeeSearClaimVO> page, SearchParamVO searchParamVO);

    /**
     * 厂端查询经销商员工信息
     *
     * @author ：李贺
     * @date ：2019/12/13
     * @description：
     */
    IPage<EmployeeSearVO> factoryEmployeeSearch(Page<EmployeeSearVO> page, SearchParamVO searchParamVO);

    //根据条件查询员工信息
    IPage<EmployeeSearBindVO> employeeSearchBind(Page<EmployeeSearBindVO> page, SearchBindParamVO searchParamVO);

    /**
     * 新增员工
     * @author 李贺
     * @date 2019年09月19日
     */
    Map<String,String> createEmployee(EmployeeAddVO employeeAddVO);

    /**
     * @description：短信登录密码发送
     * @author     ：李贺
     * @date       ：Created in 2019/9/19
     * @modified By：
     */
    void sendpasswordSms(String password, String phone);


    /**
     * 编辑员工回显
     *
     * @author 李贺
     * @date 2019年09月20日
     */
    EmployeeAddVO findEmployeeByNo(String employeeNo,Long companyId);

    /**
     * 编辑员工
     *
     * @author 李贺
     * @date 2019年09月20日
     */
    Map<String,String> updateEmployee(EmployeeAddVO employeeInfoVO);
    /**
     * 修改权限 职位列表
     *
     * @author 李贺
     * @date 2019年09月20日
     */
    IPage<PositionVO> findPosition(Page page,String employeeNo);

    /**
     * 添加用户角色
     *
     * @author 李贺
     * @date 2019年09月20日
     */
    PositionVO addRole(AddRolePO addrolepo);


    /**
     * 添加-用户角色
     *
     * @author adu
     */
    PositionVO addRoles(AddRolePO addrolepo);
    /**
     * 获得用户可选角色列表
     *
     * @author 李贺
     * @date 2019年09月21日
     */
    List<FindRoleVO> findRole( String employeeNo,Long orgId,Integer isAdd);

    /**
     * 获得用户可选角色列表
     *
     * @author 李贺
     * @date 2019年09月21日
     */
    Map<String, List<FindRolePositionVO>> findRole2(Long userOrgId);

    /**
     * 更新用户权限
     *
     * @author 李贺
     * @date 2019年09月21日
     */
    void updatePermission(UserPermissionPO userpermissionpo);

    /**
     * 根据用户的userOrgId查询用户的角色Id
     *
     * @return
     * @author 李贺
     * @date 2019年09月23日
     */
    List<Long> findRoleIds(Long userOrgId);

    /**
     * 保存用户权限
     *
     * @return
     * @author 李贺
     * @date 2019年09月24日
     */
    void savePermission(RolePDto rolepdto);

    /**
     * 删除员工职位
     *
     * @return
     * @author 李贺
     * @date 2019年09月24日
     */
    void deleteUserOrg(Long userOrgId);


    List<Map<String, Object>> getEmployee(String time);

    /**
     * 绑定/变更手机号
     *
     * @return
     * @author 李贺
     * @date 2019年11月5日
     */
    void updatePhone(BindingPhoneVO bindingPhoneVO);

    /**
     * 获得是否绑定微信信息
     *
     * @return
     * @author 李贺
     * @date 2019年11月5日
     */
    Map<String,String> getWeChatBinding();

    /**
     * 绑定/解绑微信
     *
     * @return
     * @author 李贺
     * @date 2019年11月5日
     */
    Map<String,String> updateWeChatBinding(WechatInfo wechatInfo);

	//CMS-更改-{1850【经销商区域经理维护】人员角色属性包含“区域经理”的，人员角色分配后自动带入到区域经理维护功能中}-START
	/**
	 * 根据 USER_ID，ORG_TYPE，POSITION_CODE（或更多） 查询
	 * @return
	 * @author baiyuxin
	 * @date 2019年11月5日
	 */
	List<Map<String,Object>> findUserOrgRolePosition(Map<String,Object> queryParam);

    Map<String,String> findClueSourceids(Long userOrgId);
    //CMS-更改-{1850【经销商区域经理维护】人员角色属性包含“区域经理”的，人员角色分配后自动带入到区域经理维护功能中}-END
    RestResultResponse delaultPhoneSet(String dealerCode);

    List<EmployeeVO> getEmployeeByUserIds(String userIds);
}
